package thread;

/**
 * 静态方法锁
 * 如果我们在静态方法上使用synchronized,那么该方法一定是具有同步效果
 */
public class SyncDemo3 {
    public static void main(String[] args) {
        Boo b1 = new Boo();
        Boo b2 = new Boo();
        Thread t1 = new Thread(){
            @Override
            public void run() {
                b1.doSome();
            }
        };
        Thread t2 = new Thread(){
            @Override
            public void run() {
                b2.doSome();
            }
        };
        t1.start();
        t2.start();
    }
}
class Boo {
    /**
     * 静态方法锁对象指的是当前类的类对象
     * 一个类的Class的实例全局唯一
     * Boo.java 类文件
     *  ↓ 编译期(JVM) 生成Class类的实例(全局唯一)
     * Boo.class 字节码文件
     */
    //public synchronized static void doSome(){
    public static void doSome(){
        synchronized (Boo.class){
            Thread t = Thread.currentThread();
            System.out.println(t.getName()+":正在执行doSome方法...");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(t.getName()+":执行doSome方法完毕!!!");
        }

    }
}
